// Доступ к функциям, написанным на языке ассемблера

// Тело функции написано на ассемблере
// эта функция возвращает x+y+z
#pragma warn- 			// запретим предупреждения
int summa(int x, int y, int z)
{
#asm
ld r30,Y 	; В регистре R30 младший байт (LSB) переменной z
ldd r31,Y+1	; В регистре R31 старший байт (MSB) переменной z
ldd r26,Y+2	; В регистре R26 - LSB переменной y
ldd r27,Y+3	; В регистре R27 - MSB переменной y
add r30,r26	; В регистрах (R31,R30)=z+y
adc r31,r27
ldd r26,Y+4	; В регистре R26 - LSB переменной x
ldd r27,Y+5	; В регистре R27 - MSB переменной x
add r30,r26	; В регистрах (R31,R30)=(R31,R30)+x
adc r31,r27
#endasm
}
#pragma warn+ 			// разрешим предупреждения

/* Основная функция программы */

void main(void)
{
int result;
// теперь вызовем функцию и сохраним результат в переменной result
result=summa(12,34,56);
}
